In today's computer networks, sharing data among devices has become desirable if not essential. Not only does the shared data need to be replicated on each device, but the set of replicated data must be synchronized so that changes made to one replica are reflected in all the others. Synchronization enables many users to work with their own local copy of shared data but have the shared data updated as if they were working on a single, centralized database. For shared data applications where users are geographically widely distributed, replication and synchronization are often the most efficient methods for effectively utilizing shared data.
In addition to desktop computers, workstations, and servers, modern computing environments often include lightweight handheld computing devices that fit into a pocket, purse, or day planner. Modern computing environments range from private networks to the Internet. Although a wide range of application programs can be executed on handheld computers, shared data applications are particularly popular and well suited for these devices. Shared data applications include, among many others, electronic calendars and task lists, electronic mail organizers, and electronic address books. A device running one or more of these applications stores electronic data that is or can be replicated and shared with other devices. It is desirable, if not essential, then to at least periodically synchronize data stored on each device. For example, many calendaring applications allow devices to share data or records concerning each user's appointments. It is important that when a new appointment is added or an existing appointment is modified on one device that addition or change is reflected on all devices providing calendaring.
Where only two computing devices are involved, synchronization is a relatively simple process. However, modern computing environments tend to be more complex. A single user desires to synchronize shared data stored on three or more devices. FIG. 1 provides an example of a conventional approach to synchronizing shared data between three computing devices. The shared data environment 10 of FIG. 1 includes server 12, mobile device 14, and desktop computer 16 each interconnected by link 18. Each device 12, 14, and 16 includes a data store 19, 20, or 21 containing shared data to be synchronized. Server 12 also includes synch engine 22, programming capable of identifying changes in one data store 19, 20, or 21, and updating the other data stores to reflect those changes. Where synch engine 22 detects changes to data store 18 on server 12, it can directly update data stores 20 and 21 on mobile device 14 and desktop computer 16. However, an indirect approach is required to update data store 20 on mobile device 14 to reflect changes detected in data store 21 on desktop computer 16. The same is true when updating data store 21 on desktop computer 16 to reflect changes detected in data store 20 on mobile device 14. First synch engine 22 updates data store 19 on server 12 to reflect the changes and then updates data stores 20 and 21 on mobile device 14 or desktop computer 16.
The approach of FIG. 1 works well when mobile device 14 and desktop computer 16 are connected to server 12 and when it is not desirable to synchronize data directly between mobile device 14 and desktop computer 16. However, as its label suggests, mobile device 14 is often not connected to server 12, and it is often desirable to synchronize data directly between mobile device 14 and desktop computer 16.